import instance, { QueryParams } from '@/config/request'
// import { QueryParams } from '@/config/request/constant'
import { AxiosInstance } from 'axios'

const CommonApi = (baseUrl: string, axiosInstance?: AxiosInstance) => {
    const me: any = {}
    me.instance = axiosInstance || instance

    /**
     * 查询页面方法
     * @param params 查询条件
     * @returns 查询的异步函数
     */
    me.query = (params: QueryParams) => {
        return me.instance.post(`${baseUrl}/query`, params)
    }

    /**
     * 根据主键id获取信息
     * @param id 主键id
     * @returns 获取信息的异步函数
     */
    me.get = (id: string | number) => {
        return me.instance.get(`${baseUrl}/get/${id}`)
    }

    me.getByFilter = (params: any) => {
        return me.instance.post(`${baseUrl}/getByFilter`, params)
    }

    /**
     * 根据主键id删除数据
     * @param id 主键id
     * @returns 删除的异步函数
     */
    me.delete = (id: string | number) => {
        return me.instance.delete(`${baseUrl}/delete/${id}`)
    }

    /**
     * 批量删除
     * @param ids 主键id集合
     * @returns 批量删除的异步函数
     */
    me.deleteBatch = (ids: string[] | number[]) => {
        return me.instance.post(`${baseUrl}/deleteBatch`, ids)
    }

    /**
     * 保存前的校验函数
     * @param entity 保存的对象
     * @returns 校验的异步函数
     */
    me.beforeSaveCheck = (entity: any) => {
        return me.instance.post(`${baseUrl}/beforeSaveCheck`, entity)
    }

    /**
     * 保存函数
     * @param entity 保存的对象
     * @returns 保存的异步函数 
     */
    me.save = (entity: any) => {
        return me.instance.post(`${baseUrl}/save`, entity)
    }

    /**
     * 批量保存函数
     * @param entityList 批量保存的对象集合
     * @returns 批量保存的异步函数
     */
    me.saveBatch = (entityList: any[]) => {
        return me.instance.post(`${baseUrl}/saveBatch`, entityList)
    }

    /**
     * 导出 Excel 的函数
     * @param params 页面查询条件
     * @returns 导出的异步函数
     */
    me.exportExcel = (params: QueryParams) => {
        const config = {
            responseType: "blob",
        }
        return me.instance.post(`${baseUrl}/exportExcel`, params, config)
    }

    /**
     * 下载数据导入模板
     * @returns 数据导入模板Excel文件
     */
    me.exportExcelTemplate = (params: any) => {
        const config = {
            responseType: "blob",
        }
        return me.instance.post(`${baseUrl}/exportExcelTemplate`, params, config)
    }

    /**
     * 数据导入查询页面方法
     * @param params 查询条件
     * @returns 查询的异步函数
     */
    me.queryExcelImportData = (params: QueryParams) => {
        return me.instance.post(`${baseUrl}/queryExcelImportData`, params)
    }

    /**
     * 批量删除数据导入页面的数据
     * @param ids 主键id集合
     * @returns 批量删除的异步函数
     */
    me.deleteExcelImportBatch = (ids: string[]) => {
        return me.instance.post(`${baseUrl}/deleteExcelImportBatch`, ids)
    }

    /**
     * 通过Excel导入数据
     * @param file 上传的excel
     * @param defaultValue 导入时需要添加的默认值
     * @returns 通过Excel导入数据的异步函数
     */
    me.importExcel = (file: any, defaultValue: any) => {
        const params = new FormData()
        params.append('file', file)
        params.append('filter', JSON.stringify({defaultValue}))
        // 修改请求头
        const config = {
            headers: {
                "Content-Type": "multipart/form-data"
            }
        }
        return me.instance.post(`${baseUrl}/importExcel`, params, config)
    }

    /**
     * 导入正式库
     * @param params queryParams为查询参数，ids为页面勾选的数据
     * @returns 导入正式库的异步函数
     */
    me.importDatabase = (params: { queryParams: QueryParams, ids: string[] }) => {
        return me.instance.post(`${baseUrl}/importDatabase`, params)
    }

    /**
     * 重新提交导入数据并校验正确性
     * @param data 重新提交数据
     * @returns 重新提交的异步函数
     */
    me.recheckExcelImport = (data: any[]) => {
        return me.instance.post(`${baseUrl}/recheckExcelImport`, data)
    }

    return me
}

export { CommonApi }